package com.sbtr.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期常用工具类
 */
public class DateHelper {
     

    // 获取当前时间的时间戳（秒级）
    public static long getCurrentTimestamp() {
        return System.currentTimeMillis() / 1000;
    }

    // 将字符串格式的日期转为Date对象
    public static Date parseDate(String dateStr, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(dateStr);
    }


     /**
     * 将日期格式化为指定的字符串
     * @param date 待格式化的日期对象
     * @param pattern 格式化模板，例如："yyyy-MM-dd HH:mm:ss"
     * @return 格式化后的日期字符串
     */
    public static String formatDate(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 获取当前时间的字符串表示，格式为"yyyy-MM-dd HH:mm:ss"
     * @return 当前时间的字符串表示
     */
    public static String getCurrentTime() {
        return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 获取当前日期的字符串表示，格式为"yyyy-MM-dd"
     * @return 当前日期的字符串表示
     */
    public static String getCurrentDate() {
        return formatDate(new Date(), "yyyy-MM-dd");
    }

    /**
     * 在指定的日期上增加或减少指定的天数
     * @param date 待处理的日期对象
     * @param days 要增加或减少的天数，正数表示增加，负数表示减少
     * @return 处理后的日期对象
     */
    public static Date addDays(Date date, int days) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, days);
        return cal.getTime();
    }

    /**
     * 在指定的日期上增加或减少指定的小时数
     * @param date 待处理的日期对象
     * @param hours 要增加或减少的小时数，正数表示增加，负数表示减少
     * @return 处理后的日期对象
     */
    public static Date addHours(Date date, int hours) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.HOUR_OF_DAY, hours);
        return cal.getTime();
    }

    /**
     * 在指定的日期上增加或减少指定的分钟数
     * @param date 待处理的日期对象
     * @param minutes 要增加或减少的分钟数，正数表示增加，负数表示减少
     * @return 处理后的日期对象
     */
    public static Date addMinutes(Date date, int minutes) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, minutes);
        return cal.getTime();
    }

    /**
     * 获取指定日期所在月份的第一天的日期对象
     * @param date 待处理的日期对象
     * @return 指定日期所在月份的第一天的日期对象
     */
    public static Date getFirstDayOfMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    /**
     * 获取当前时间的字符串表示，格式为"yyyy-MM-dd HH:mm:ss"
     * @return 当前时间的字符串表示
     */
    public static String geTimeName(String fileName) {

        return formatDate(new Date(), "yyyyMMddHHmmss")+"_"+fileName;
    }

}
